//package cn.ggsaas.gateway.filter;
//
//import com.alibaba.fastjson.JSON;
//import cn.ggsaas.base.enums.ErrorEnum;
//import cn.ggsaas.base.resp.*;
//import cn.ggsaas.base.util.JWTUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
//import org.springframework.cloud.gateway.filter.GlobalFilter;
//import org.springframework.core.Ordered;
//import org.springframework.core.io.buffer.DataBuffer;
//import org.springframework.http.HttpStatus;
//import org.springframework.http.server.reactive.ServerHttpRequest;
//import org.springframework.http.server.reactive.ServerHttpResponse;
//import org.springframework.stereotype.Component;
//import org.springframework.web.server.ServerWebExchange;
//import org.springframework.web.server.WebSession;
//import reactor.core.publisher.Flux;
//import reactor.core.publisher.Mono;
//
//import java.time.LocalDateTime;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * @author liyuzhen
// */
//@Slf4j
//@Component
//public class SaaSAuthorizeFilter implements GlobalFilter, Ordered {
////public class SaaSAuthorizeFilter{
//
//    /**
//     * token加密 密钥
//     * //@Value("${TOKEN.SECRETKEY}")
//     */
//    private String SECRETKEY = "dog@ui";
//
//    /**
//     * 白名单列表
//     * //@Value("${WHITE.LIST}")
//     */
//    private String WHITE_LIST = "/sapi/user/work/login";
//
//
//    @Override
//    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//        // 获取到请求
//        ServerHttpRequest serverHttpRequest = exchange.getRequest();
//        // 获取到返回
//        ServerHttpResponse serverHttpResponse = exchange.getResponse();
////        // 获取session
////        Mono<WebSession> session = exchange.getSession();
//        String uri = serverHttpRequest.getURI().getPath();
//
//        //  检查白名单（配置）
//        if(WHITE_LIST.contains(uri)) {
//           return chain.filter(exchange);
//        }
//
//        // 获取到请求头token
//        String token = serverHttpRequest.getHeaders().getFirst("token");
//
//        // 如果没有在头中找到token 返回 ErrorEnum.NOT_TOKEN
//        if (StringUtils.isBlank(token)) {
//            serverHttpResponse.setStatusCode(HttpStatus.UNAUTHORIZED);
//            return getVoidMono(serverHttpResponse, ErrorEnum.NOT_TOKEN);
//        }
//
//        // 校验 token 是否正确
//        try {
//            JWTUtil.verifyToken(token, SECRETKEY);
//        } catch (Exception ex) {
//            return getVoidMono(serverHttpResponse, ErrorEnum.INVALID_TOKEN);
//        }
//
//        // 拿到 token 中的 userId
//        Long fromTokenUserId = JWTUtil.getUserId(token);
//        if (fromTokenUserId == null) {
//            serverHttpResponse.setStatusCode(HttpStatus.UNAUTHORIZED);
//            return getVoidMono(serverHttpResponse, ErrorEnum.NOT_TOKEN);
//        }
//
//        return chain.filter(exchange);
//    }
//
//	private Mono<Void> getVoidMono(ServerHttpResponse serverHttpResponse, ErrorEnum errorEnum) {
//        serverHttpResponse.getHeaders().add("Content-Type", "application/json;charset=UTF-8");
//        Map<String, Object> r = new HashMap<>(4);
//        r.put("timestamp", LocalDateTime.now().toString());
//        r.put("status", errorEnum.getCode());
//        r.put("path", null);
//        r.put("msg", errorEnum.getValue());
//        DataBuffer dataBuffer = serverHttpResponse.bufferFactory().wrap(JSON.toJSONString(r).getBytes());
//        return serverHttpResponse.writeWith(Flux.just(dataBuffer));
//    }
//
//    @Override
//    public int getOrder() {
//        return -100;
//    }
//
//}